package client_test;

import rpc_1.interfaces.HelloService;
import rpc_1.object.HelloObject;
import rpc_netty.Client.NettyClient_nacos;
import rpc_netty.Client.RpcClientProxy_netty;


//测试如果调用的服务处理时间过长的现象，会发生主线程阻塞(配合这个测试的，需要具体的service中实现长时间处理不返回的逻辑)
//所以应该提供一些 超时机制（处理调用时间过长，没返回结果）/失败机制（处理返回的结果显示调用失败）
public class LongProcess_test {

    public static void main(String[] args) throws InterruptedException {
        NettyClient_nacos client=new NettyClient_nacos();
        RpcClientProxy_netty rpcClientProxy_netty = new RpcClientProxy_netty(client);
        HelloService proxy = rpcClientProxy_netty.getProxy(HelloService.class);
        HelloObject helloObject=new HelloObject(100,"guten!");
        /*
        如果让服务端在执行对应方法的时候出现一直不完成的现象（例如执行方法的时候sleep）
        那么这个调用最终会阻塞在 channel.closeFuture().sync()上，导致整个主线程阻塞
        下面的System.out.println("i am running!");一直不会执行

        具体原因可以看channel.closeFuture().sync()上的注释
         */
        System.out.println(proxy.hello(helloObject));
        System.out.println("i am running!");
    }
}
